class Solution {
    /**
     * 对于出现三次的数字，各 二进制位 出现的次数都是 33 的倍数。
     * 因此，统计所有数字的各二进制位中 11 的出现次数，并对 33 求余，结果则为只出现一次的数字。
     *
     */
    public int singleNumber(int[] nums) {
        // bit[i] 表示
        int[] bit = new int[32];
        for (int n : nums) {
            for (int i = 0; i <= 31; i++) {
                bit[i] += ((n >> i) & 1);
            }
        }

        // bit[i]%3 要么为1 要么为0
        int ans = 0;
        for (int i = 0; i <= 31; i++) {
            ans += ((bit[i] % 3) << i);
        }

        return ans;
    }
}